﻿#define _CRT_SECURE_NO_WARNINGS 1 //安心，加油！

#include"Myset.h"
#include"Mymap.h"


//void TestBasicFunction()
//{
//    cout << "=== 基础功能测试 ===" << endl;
//
//    anxin::map<string, int> map;
//
//    // 测试插入
//    auto result1 = map.insert({ "apple", 5 });
//    cout << "插入apple: " << (result1.second ? "成功" : "失败") << endl;
//
//    auto result2 = map.insert({ "banana", 3 });
//    cout << "插入banana: " << (result2.second ? "成功" : "失败") << endl;
//
//    // 测试重复插入
//    auto result3 = map.insert({ "apple", 10 });  // 应该失败
//    cout << "重复插入apple: " << (result3.second ? "成功" : "失败") << endl;
//}
//
//void TestOperatorBracket()
//{
//    cout << "\n=== operator[] 测试 ===" << endl;
//
//    anxin::map<string, int> map;
//
//    // 测试插入新键
//    map["apple"] = 5;
//    map["banana"] = 3;
//    map["cherry"] = 8;
//
//    cout << "apple: " << map["apple"] << endl;
//    cout << "banana: " << map["banana"] << endl;
//    cout << "cherry: " << map["cherry"] << endl;
//
//    // 测试修改现有键
//    map["apple"] = 10;
//    cout << "修改后apple: " << map["apple"] << endl;
//
//    // 测试访问不存在的键（应该创建并初始化为0）
//    cout << "不存在的orange: " << map["orange"] << endl;
//}
//
//void TestIterator()
//{
//    cout << "\n=== 迭代器测试 ===" << endl;
//
//    anxin::map<int, string> map;
//
//    // 插入一些数据
//    map[3] = "three";
//    map[1] = "one";
//    map[4] = "four";
//    map[2] = "two";
//
//    // 测试普通迭代器（应该按key排序输出）
//    cout << "普通迭代器遍历:" << endl;
//    for (auto it = map.begin(); it != map.end(); ++it) {
//        cout << it->first << ": " << it->second << endl;
//    }
//
//    // 测试范围for循环（基于迭代器）
//    cout << "范围for循环:" << endl;
//    for (const auto& pair : map) {
//        cout << pair.first << ": " << pair.second << endl;
//    }
//}
//
//void TestConstIterator()
//{
//    cout << "\n=== 常量迭代器测试 ===" << endl;
//
//    anxin::map<string, int> map;
//    map["x"] = 10;
//    map["y"] = 20;
//    map["z"] = 30;
//
//    const anxin::map<string, int>& const_map = map;
//
//    cout << "常量迭代器遍历:" << endl;
//    for (auto it = const_map.begin(); it != const_map.end(); ++it) {
//        // it->second = 100;  // 这行应该编译错误，因为const_iterator不能修改值
//        cout << it->first << ": " << it->second << endl;
//    }
//}
//
//void TestEdgeCases()
//{
//    cout << "\n=== 边界情况测试 ===" << endl;
//
//    anxin::map<int, string> map;
//
//    // 测试空map的迭代器
//    cout << "空map测试:" << endl;
//    if (map.begin() == map.end()) {
//        cout << "begin() == end() for empty map - 正确" << endl;
//    }
//
//    // 插入后测试
//    map[1] = "one";
//    auto begin_it = map.begin();
//    auto end_it = map.end();
//
//    if (begin_it != end_it) {
//        cout << "begin() != end() for non-empty map - 正确" << endl;
//        cout << "第一个元素: " << begin_it->first << ": " << begin_it->second << endl;
//    }
//
//    // 测试迭代器递增到end()
//    ++begin_it;
//    if (begin_it == end_it) {
//        cout << "递增后到达end() - 正确" << endl;
//    }
//}
//




void TestBasicFunction()
{
    cout << "=== Set基础功能测试 ===" << endl;

    anxin::set<int> s;

    // 测试插入
    auto result1 = s.insert(10);
    cout << "插入10: " << (result1.second ? "成功" : "失败") << endl;

    auto result2 = s.insert(20);
    cout << "插入20: " << (result2.second ? "成功" : "失败") << endl;

    auto result3 = s.insert(5);
    cout << "插入5: " << (result3.second ? "成功" : "失败") << endl;

    // 测试重复插入
    auto result4 = s.insert(10);  // 应该失败
    cout << "重复插入10: " << (result4.second ? "成功" : "失败") << endl;
}

void TestIterator()
{
    cout << "\n=== Set迭代器测试 ===" << endl;

    anxin::set<int> s;

    // 插入无序数据，验证排序特性
    s.insert(30);
    s.insert(10);
    s.insert(40);
    s.insert(20);
    s.insert(50);

    cout << "普通迭代器遍历（应该有序）:" << endl;
    for (auto it = s.begin(); it != s.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    cout << "范围for循环遍历:" << endl;
    for (const auto& key : s) {
        cout << key << " ";
    }
    cout << endl;
}

void TestStringSet()
{
    cout << "\n=== 字符串Set测试 ===" << endl;

    anxin::set<string> s;

    s.insert("apple");
    s.insert("banana");
    s.insert("cherry");
    s.insert("apple");  // 重复

    cout << "字符串set遍历:" << endl;
    for (const auto& str : s) {
        cout << str << " ";
    }
    cout << endl;
}

void TestConstIterator()
{
    cout << "\n=== Set常量迭代器测试 ===" << endl;

    anxin::set<int> s;
    s.insert(100);
    s.insert(200);
    s.insert(300);

    const anxin::set<int>& const_s = s;

    cout << "常量迭代器遍历:" << endl;
    for (auto it = const_s.begin(); it != const_s.end(); ++it) {
        // *it = 999;  // 这行应该编译错误，因为set元素不可修改
        cout << *it << " ";
    }
    cout << endl;
}

void TestEdgeCases()
{
    cout << "\n=== Set边界情况测试 ===" << endl;

    anxin::set<int> s;

    // 测试空set
    cout << "空set测试:" << endl;
    if (s.begin() == s.end()) {
        cout << "begin() == end() for empty set - 正确" << endl;
    }

    // 插入单个元素测试
    s.insert(42);
    cout << "单元素set:" << endl;
    for (auto it = s.begin(); it != s.end(); ++it) {
        cout << "元素: " << *it << endl;
    }

    // 测试迭代器递增
    auto it = s.begin();
    cout << "第一个元素: " << *it << endl;
    ++it;
    if (it == s.end()) {
        cout << "递增后到达end() - 正确" << endl;
    }
}

void TestLargeSet()
{
    cout << "\n=== 大量数据测试 ===" << endl;

    anxin::set<int> s;

    // 插入大量数据验证平衡性
    for (int i = 0; i < 20; ++i) {
        s.insert(i * 3 % 17);  // 插入一些重复数据
    }

    cout << "大量数据遍历（应该有序无重复）:" << endl;
    int count = 0;
    for (const auto& key : s) {
        cout << key << " ";
        count++;
        if (count % 10 == 0) cout << endl;
    }
    cout << "\n总元素个数: " << count << endl;
}






int main()
{
    //cout << "开始测试 MyMap..." << endl;

    //TestBasicFunction();
    //TestOperatorBracket();
    //TestIterator();
    //TestConstIterator();
    //TestEdgeCases();

    //cout << "\n=== 所有测试完成 ===" << endl;



    cout << "开始测试 MySet..." << endl;

    TestBasicFunction();
    TestIterator();
    TestStringSet();
    TestConstIterator();
    TestEdgeCases();
    TestLargeSet();

    cout << "\n=== 所有Set测试完成 ===" << endl;

    return 0;
}







